# 安装pythong
# pip install pyautogui opencv-python numpy pygetwindow Pillow
import pyautogui
import cv2
import time
import numpy as np
import pygetwindow as gw
from PIL import Image

# 等待游戏加载完毕
time.sleep(3)

# 单次点击按键
def push_button(acction):
    pyautogui.keyDown(acction)
    pyautogui.keyUp(acction)
    time.sleep(0.3)

# 连续点击按键
def continuous_push_button(acction, count):
    while count > 0:
        push_button(acction)
        count -= 1

# 截图并查找图像模板
def case_png(img_path):
    # 截取当前整个屏幕
    screenshot = pyautogui.screenshot()
    screenshot.save('screenshot.png')  # 保存截图到本地

    # 使用Pillow打开截图
    image = Image.open('screenshot.png')

    # 将Pillow图像转换为OpenCV格式
    cv_image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)

    # 加载要查找的图像模板
    template = cv2.imread(img_path)

    # 使用模板匹配方法查找图像位置
    result = cv2.matchTemplate(cv_image, template, cv2.TM_CCOEFF_NORMED)
    threshold = 0.8  # 设置匹配阈值

    loc = np.where(result >= threshold)
    if len(loc[0]) == 0:
        # 未找到图像模板
        return False
    else:
        return True

# 使用传真移动到森林局      
def move_to_senlinju():
    # 打开菜单
    push_button('esc')  # 按下Esc键
    # 点击物品
    push_button('enter')
    # 选择特殊物品栏
    push_button('up')
    # 点击特殊物品
    push_button('enter')
    # 点击传真装置
    push_button('enter')
    # 点击使用
    push_button('enter')
    # 选择森林局
    push_button('right')
    push_button('right')
    push_button('down')
    # 点击森林局
    push_button('enter')

# 使用传真移动到小山村  
def move_to_xiaoshancun():
    # 打开菜单
    push_button('esc')  # 按下Esc键
    # 点击物品
    push_button('enter')
    # 选择特殊物品栏
    push_button('up')
    # 点击特殊物品
    push_button('enter')
    # 点击传真装置
    push_button('enter')
    # 点击使用
    push_button('enter')
    if case_png('chuanzhen_ok.png') == True:
        # 选择小山村
        push_button('right')
        push_button('down')
        # 点击小山村
        push_button('enter')
    else:
        print(f"请上战车，要上战车才能使用传真装置")
        time.sleep(1000)
        exit()

def check_fight():
    # 检查是否遇敌
    if case_png('yudi.png') == True:
        return True
    else:
        return False

def exit_fight():
    # 退出战斗
    push_button('esc')  # 按下Esc键
    push_button('down')
    push_button('down')
    push_button('right')
    push_button('enter')
    
# 移动到刷钱点
def move_to_get_money_point():
    print(f"以森林局为起点，移动到刷钱点")

# 检查是否有燃烧瓶
def check_fire_flask():
    # 打开菜单
    push_button('esc')  # 按下Esc键
    # 点击物品
    push_button('enter')
    # 切换到战斗物品
    push_button('down')
    push_button('down')
    # 点击战斗物品
    push_button('enter')
    # 遍历所有战斗物品
    find_count = 0
    find_fire_flask = False
    while find_count < 15:
        if case_png('fire_flask.png') == True:
            # 找到火焰瓶
            find_fire_flask = True
            break
        else:
            push_button('down')
            find_count += 1
    # 推出物品栏
    continuous_push_button('esc', 3)
    return find_fire_flask

# 全体乘(boarding)降(landing)
def all_boarding_or_landing(acction):
    # 打开菜单
    push_button('esc')  # 按下Esc键
    # 切换到乘降
    push_button('right')
    # 点击乘降
    push_button('enter')
    # 选择乘降（上车-boarding or 下车-landing）
    if acction == 'landing':
        push_button('down')
    push_button('enter')
    time.sleep(0.5)

# 进村购买火焰瓶
def xiaoshancun_buy_fire_flask():
    # 进村
    push_button('up')
    time.sleep(1)
    # 移动进道具店
    continuous_push_button('up', 5)
    # 战车无法通行，全体下车
    all_boarding_or_landing('landing')
    continuous_push_button('up', 4)
    continuous_push_button('left', 2)
    time.sleep(1)
    # 移动到售货员
    continuous_push_button('up', 7)
    continuous_push_button('right', 2)
    # 与售货员交谈
    push_button('enter')
    time.sleep(1)
    push_button('enter')
    # 点击买入
    push_button('enter')
    # 找到火焰瓶并购买
    while True:
        if case_png('fire_flask.png') == True:
            # 购买火焰瓶
            push_button('enter')
            continuous_push_button('up', 10)
            push_button('enter')
            # 再把火焰瓶下面的危险蜡烛一起购买（效果一样）
            push_button('down')
            push_button('enter')
            continuous_push_button('up', 10)
            push_button('enter')
            # 退出道具店
            push_button('esc')
            push_button('esc')
            time.sleep(1)
            push_button('esc')
            break
        else:
            push_button('down')
    # 退出道具店
    continuous_push_button('left', 2)
    continuous_push_button('down', 8)
    time.sleep(1)
    # 回到战车位置
    continuous_push_button('right', 2)
    continuous_push_button('down', 5)
    continuous_push_button('up', 2)
    # 全体上车
    all_boarding_or_landing('boarding')


def buy_fire_flask():
    # 移动到小山村
    move_to_xiaoshancun()
    time.sleep(1)
    if case_png('xiaoshancun_start.png') == True:
        xiaoshancun_buy_fire_flask()
    else:
        print(f"位置错误，当前位置不在小山村")
        time.sleep(1000)
        exit()


# 校验当前打开的窗口
while True:
    # 获取所有窗口
    windows = gw.getAllWindows()
    find_window = False
    # 找到当前活动窗口
    for window in windows:
        if window.isActive:
            print(f"当前活动窗口的标题是: {window.title}")
            # 活动窗口的标题 重装机兵Lurk正式版1.15（QQ群308276525@夜灵）
            if window.title == '重装机兵Lurk正式版1.15（QQ群308276525@夜灵）':
                find_window = True
                break
    # 找到活动窗口
    if find_window == True:
        break
    else:
        print(f"请将【重装机兵Lurk正式版1.15】切换到最前")
        time.sleep(1)

# 检查是否有火焰瓶，没有就去购买
if check_fire_flask() == False:
    buy_fire_flask()

# 移动到森林局
move_to_senlinju()
# 移动到刷钱点
if case_png('senlinju_start.png') == True:
    move_to_get_money_point()


